// 📁 service/BaseService.java
package com.library.management.service;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;

/**
 * 基础服务接口
 * 定义通用的CRUD操作
 *
 * @param <T> 实体类型
 * @param <ID> 主键类型
 */
public interface BaseService<T, ID> {

    /**
     * 保存实体
     */
    T save(T entity);

    /**
     * 更新实体
     */
    T update(ID id, T entity);

    /**
     * 根据ID删除
     */
    void delete(ID id);

    /**
     * 根据ID查找 - 返回Optional
     */
    Optional<T> findById(ID id);

    /**
     * 根据ID获取 - 返回实体或抛出异常
     */
    T getById(ID id);

    /**
     * 查找所有
     */
    List<T> findAll();

    /**
     * 分页查找
     */
    Page<T> findAll(Pageable pageable);

    /**
     * 检查是否存在
     */
    boolean exists(ID id);
}